/**
在 Node.js 中，读取文件夹的操作主要通过  `fs`  模块来实现。该模块提供了几种方法来读取文件夹的内容，包括异步和同步的方式。
  1. 文件夹读取方法
   1.1 异步读取文件夹
  -  `fs.readdir(path, options, callback)` :
    - 参数:
      -  `path` : 要读取的文件夹路径。
      -  `options` : 可选参数，可以指定编码（如 'utf8'），默认情况下返回文件名的 Buffer。
      -  `callback` : 回调函数，接受两个参数：错误对象和文件夹内容（文件名数组）。
    - 示例:
  const fs = require('fs');

    fs.readdir('exampleFolder', { encoding: 'utf8' }, (err, files) => {
        if (err) {
            console.error('读取文件夹失败:', err);
            return;
        }
        console.log('文件夹内容:', files);
    });
   1.2 同步读取文件夹
  -  `fs.readdirSync(path, options)` :
    - 参数:
      -  `path` : 要读取的文件夹路径。
      -  `options` : 可选参数，可以指定编码（如 'utf8'）。
    - 返回值: 返回文件夹内容的数组（文件名）。
    - 示例:
  const fs = require('fs');

    try {
        const files = fs.readdirSync('exampleFolder', { encoding: 'utf8' });
        console.log('文件夹内容:', files);
    } catch (err) {
        console.error('读取文件夹失败:', err);
    }
  2. 错误处理
  在读取文件夹时，错误处理非常重要。可能会遇到的错误包括：
  - 文件夹不存在
  - 权限不足

  开发者应在回调函数或  `try-catch`  块中进行适当的错误处理，以确保程序的健壮性。

  3. 使用场景
  - 文件夹读取操作常用于获取文件列表、文件管理、数据处理等场景。例如，在文件上传后，可以读取特定目录中的文件以进行进一步处理。

  4. 总结
  Node.js 的  `fs`  模块提供了灵活的文件夹读取方法，开发者可以选择异步或同步方式。使用  `readdir`  和  `readdirSync`  方法，可以轻松获取指定文件夹的内容。掌握这些方法后，开发者可以有效地管理和处理文件夹及其内容。
 */
const fs = require("fs");

// 1. 读取文件夹内容
// fs.readdir("./create-mkdir", (err, files) => {
//   console.log(files); // [ 'mkdir1', 'mkdir2', 'writeFile-index.txt' ]
// });

// 2.读取文件夹, 获取到文件夹中文件的信息
// fs.readdir("./create-mkdir", { withFileTypes: true }, (err, files) => {
//   files.forEach((item) => {
//     if (item.isDirectory()) {
//       console.log(`${item.name} 是文件夹`);

//       fs.readdir(
//         `./create-mkdir/${item.name}`,
//         { withFileTypes: true },
//         (err, files) => {
//           console.log("内容：", files);
//         }
//       );
//     } else {
//       console.log(`${item.name} 是文件`);
//     }
//   });
// });

// 3.递归的读取文件夹中所有的文件
function readDirectory(path) {
  fs.readdir(path, { withFileTypes: true }, (err, files) => {
    files.forEach((item) => {
      if (item.isDirectory()) {
        console.log(`${item.name} 是文件夹`);
        readDirectory(`${path}/${item.name}`);
      } else {
        console.log(`${item.name} 是文件`);
      }
    });
  });
}

readDirectory("./create-mkdir");

// 4. 判断文件夹是否存在
fs.access("./create-mkdir", fs.constants.F_OK, (err) => {
  console.log(err ? "文件夹不存在" : "文件夹存在");
});
